/**
 *
 */
package com.honeybees.framework.common.util.filetype;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang3.StringUtils;

import com.honeybees.framework.common.util.Utils;

/**
 * <dl>
 * <dt><b> 根据文件头信息判断文件类型 </b></dt>
 * <p>
 * <dd>功能描述</dd>
 * </dl>
 * <p>
 * Copyright (C) All rights reserved.
 * </p>
 *
 * @author 李远明
 * @since 2016-08-10 17:43:53
 */
public class FileTypeUtils {

    /**
     * <dl>
     * <dt><b> 获取文件头信息 </b></dt>
     * <p>
     * <dd>功能描述</dd>
     * </dl>
     *
     * @param filePath
     *            文件路径
     * @return 文件头信息
     * @author 李远明
     * @version 2016-08-10 17:48:14
     */
    public static String getFileHeader(String filePath) {
        byte[] bytes = new byte[28];

        InputStream in = null;
        try {
            in = new FileInputStream(filePath);
            in.read(bytes, 0, 28);
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        } finally {
            try {
                in.close();
            } catch (IOException e) {
            }
        }
        String txt = Utils.bytes2hex(bytes);
        return txt;
    }

    /**
     * <dl>
     * <dt><b> 获取文件头信息 </b></dt>
     * <p>
     * <dd>功能描述</dd>
     * </dl>
     *
     * @param in
     *            文件流
     * @return 文件头信息
     * @author 李远明
     * @version 2016-08-10 17:48:27
     */
    public static String getFileHeader(InputStream in) {
        byte[] bytes = new byte[28];
        try {
            in.read(bytes, 0, 28);
        } catch (IOException e) {
        }
        String txt = Utils.bytes2hex(bytes);
        return txt;
    }

    /**
     * <dl>
     * <dt><b> 获取文件类型 </b></dt>
     * <p>
     * <dd>功能描述</dd>
     * </dl>
     *
     * @param filePath
     *            文件路径
     * @return 文件类型
     * @author 李远明
     * @version 2016-08-10 17:53:08
     */
    public static FileType getFileType(String filePath) {
        String fileHeader = getFileHeader(filePath);

        if (StringUtils.isBlank(fileHeader)) {
            return null;
        }
        fileHeader = fileHeader.toUpperCase();

        FileType[] fileTypes = FileType.values();
        for (FileType fileType : fileTypes) {
            // 这里需要注意：每个文件的摸数的长度不一样，因此需要使用 startsWith 方法
            if (fileHeader.startsWith(fileType.getValue())) {
                return fileType;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        String path = "C:\\Users\\Administrator\\Downloads\\cn.bing.com\\AlNeversinkPit_ZH-CN10271991250_1920x1080.jpg";
        path = "C:\\Users\\Administrator\\Downloads\\QQ截图20160427180124.png";

        FileType fileType = getFileType(path);
        String value = fileType.getValue();
        String[] fileExtension = fileType.getFileExtension();

        System.out.println(value);
        System.out.println(fileExtension);

        path = "C:/Users/Administrator/Downloads/wikipedia.ico";
        String fileHeader = getFileHeader(path);
        System.out.println(fileHeader);
    }

}
